home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 24 / CU Amiga Magazine's Super CD-ROM 24 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-07].iso / CUCD / Programming / SWI / source / src / pl-buffe.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-18  |  1.3 KB  |  46 lines

  1. /*  $Id: pl-buffe.h,v 1.1 1995/04/18 12:29:04 jan Exp $
  2.  
  3.     Part of XPCE
  4.     Designed and implemented by Anjo Anjewierden and Jan Wielemaker
  5.     E-mail: jan@swi.psy.uva.nl
  6.  
  7.     Copyright (C) 1993 University of Amsterdam. All rights reserved.
  8. */
  9.  
  10. typedef struct
  11. { char *    base;            /* allocated base */
  12.   char *    top;            /* pointer to top */
  13.   char *    max;            /* current location */
  14. } buffer, *Buffer;
  15.  
  16. Buffer    newBuffer(void);
  17. void    freeBuffer(Buffer);
  18. void    growBuffer(Buffer, long);
  19.  
  20. #define addBuffer(b, obj, type) \
  21.     do \
  22.     { if ( (b)->top + sizeof(type) > (b)->max ) \
  23.         growBuffer(b, sizeof(type)); \
  24.        *((type *)(b)->top) = obj; \
  25.           (b)->top += sizeof(type); \
  26.     } while(0)
  27.   
  28. #define baseBuffer(b, type)     ((type *) (b)->base)
  29. #define topBuffer(b, type)       ((type *) (b)->top)
  30. #define inBuffer(b, addr)        ((char *) (addr) >= (b)->base && \
  31.                   (char *) (addr)  < (b)->top)
  32.  
  33. #define seekBuffer(b, cnt, type) ((b)->top = sizeof(type) * (cnt) + (b)->base)
  34. #define sizeOfBuffer(b)          ((b)->top - (b)->base)
  35. #define entriesBuffer(b, type)   (sizeOfBuffer(b) / sizeof(type))
  36. #define initBuffer(b)            ((b)->base = (b)->max = (b)->top = NULL)
  37.  
  38. #define discardBuffer(b) \
  39.     do \
  40.     { if ( (b)->base ) \
  41.         free((b)->base); \
  42.       initBuffer(b); \
  43.     } while(0)
  44.  
  45.  
  46.